<?php

/*
      文件： conf.class.php
      作用：配置文件读写类
*/

 // echo  '成功引入2';
defined('ACC') || exit('ACC Denied');

//这是一个单列模式的典型应用
 class conf{
        protected static $ins = null;
        protected $data = array();
    
        final protected function __construct(){
            // include('./config.inc.php');   //执行单个文件时可用，从index 进来找不到文件
            require(ROOT .'include/config.inc.php');
            $this->data = $_CFG;
        }

        final protected function __clone(){

        }

        public static function getIns(){
             if(self::$ins instanceof self){
                  return self::$ins;
             }else{
                   self::$ins = new self();
                   return self::$ins;
             }
        }

         //用魔术方法，读取data内的信息
       public function __get($key){
              if(array_key_exists($key, $this->data)){
                      return $this->data[$key];
              }else{
                     return null;
              }
       }

       //用魔术方法在运行期，动态增加或改变配置选项
       public function  __set($key,$v){        
             $this->data[$key] = $v;
       }
    
 }

/*   
// 测试上面的代码
 $conf = conf::getIns();

 // 已经能把配置文件的信息，读到自身的 data属性中存储起来
 print_r($conf);      //这里打印出来的是data数组,也就是include进来的文件里的值。

echo $conf->pwd,"<br/>";     
 //这样写，如果没有写魔术方法__get() 就会报错。 现在魔术方法返回pwd对应的值。

$conf -> template_dir = 'D:/www/smarty';  //这样写没有写魔术方发__set()就会报错，现在将值动态追加。

print_r($conf); //显示追加后的data数组

*/

?>